package cn.edu.sdjzu.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;

@RestController
//@Slf4j
public class Sentinel9050Controller {



    // 无需通过注解显式定义资源名称
    //@SentinelResource(value = "sys-resource", blockHandler = "handleBlock")
    @GetMapping("/sys")
    public String sys() {
        return "Hello World sys";
    }

    // 定义异常处理方法，用于处理BlockException异常
    @ResponseStatus(HttpStatus.TOO_MANY_REQUESTS)
    @ExceptionHandler(BlockException.class)
    public String handleBlock(BlockException ex) {
        return "系统繁忙，请稍后再试";
    }
    // 初始化系统规则
    @PostConstruct
    private void sysRules() {
        List<SystemRule> rules = new ArrayList<>();
        SystemRule rule = new SystemRule();
        rule.setQps(1); // 最大总QPS（每秒查询数）为10
        //rule.setHighestSystemLoad(3.0); // 最大系统负载为3.0
        //rule.setHighestCpuUsage(0.9); // 最大CPU使用率为90%
        // rule.setAvgRt(10); // 所有请求的最大平均响应时间为10毫秒
        //rule.setMaxThread(10); // 最大并行工作线程数为10
        rules.add(rule);
        SystemRuleManager.loadRules(rules);
    }

}


